Interbase/Firebird - chybny typ fieldu

Otázka od: jsdelphi@creatix.cz

17. 11. 2004 16:35

Mam ve firebirdu 1.5 definovany pohled:

create view test as
  select jmeno, prijmeni, pocet, round(pocet/5000,1) as xx from ciselnik;

(Field "pocet" je typu integer.)

Kdyz nacitam data do DBGridu pres TIBQuery(select * from test) a
nenadefinuji seznam fieldu, vytvori se v runtime seznam fieldu automaticky
(to je normalni). Problem je v tom, ze field "xx" z uvedeneho pohledu se
nadefinuje jako typ integer a nikoliv float. V pripade
"round((pocet+0.1)/5000,1) as xx" je vse v poradku a vytvori se field typu
float.

Ocekavany vysledek v DBGridu:
Petr Novak 5000 1
Jan Kun 2000 0.4

Skutecny vysledek v DBGridu (xx = round(pocet/5000,1)):
Petr Novak 5000 1
Jan Kun 2000 0

Skutecny vysledek v DBGridu (xx = round((pocet+0.1)/5000,1)):
Petr Novak 5000 1
Jan Kun 2000 0.4

Nevite nekdo co s tim? Neni problem v tom, ze na 1.radku dat je "pocet" =
5000, takze vysledek je celociselny = 1? Nechce se mi pro kazdy TIBQuery
definovat seznam fieldu, kdyz mam aplikaci v neustalem vyvoji.

Dekuji

Jan Skopovy


Odpovedá: Slavomir Skopalik

17. 11. 2004 17:45

pouzij round(CAST(poce AS FLOAT)t/5000,1),
nebo round(pocet+0.0/5000,1)

 Slavek

> create view test as
> select jmeno, prijmeni, pocet, round(pocet/5000,1) as xx
> from ciselnik;
>
> (Field "pocet" je typu integer.)


Odpovedá: petr palicka

18. 11. 2004 6:58



Slavomir Skopalik wrote:
> pouzij round(CAST(poce AS FLOAT)t/5000,1),

> nebo round(pocet+0.0/5000,1)
              ^^^^^^^^^^^^^^

to asi ne, to by nejprve delil a potom scital.
bud 0.0+... nebo 1.0*... nebo ten cast.

peca


Odpovedá: Jan Novak

20. 11. 2004 13:36

> SELECT jmeno, prijmeni, pocet, round(pocet/5000,1) AS xx FROM
ciselnik;

> field "xx" se nadefinuje jako typ integer a nikoliv float.

Kdybys to psal v Pascalu, bylo by ti to jasne hned: vysledek je
integer, kdyz misto '/' das 'div'. V prostredi, kde pro oba pripady je
'/', musis typ vysledku urcit explicitne, staci napriklad

pocet / 5000.0

nebo explicitne pretypovat ten 'pocet' volanim vhodne funkce.